import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler

# 设置 Matplotlib 中文显示（可选）
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # Windows 使用 SimHei
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题


# 生成示例数据（非线性关系）
X = np.linspace(0, 10, 100).reshape(-1, 1)  # 特征
y = np.sin(X).ravel() + np.random.normal(0, 0.1, X.shape[0])  # 目标变量，添加一些噪声

# 数据标准化
scaler_X = StandardScaler()
scaler_y = StandardScaler()

X_scaled = scaler_X.fit_transform(X)
y_scaled = scaler_y.fit_transform(y.reshape(-1, 1)).ravel()

# 创建SVR模型（使用RBF核）
svr = SVR(kernel='rbf', C=100, epsilon=0.1)

# 拟合模型
svr.fit(X_scaled, y_scaled)

# 预测
y_pred = svr.predict(X_scaled)

# 反标准化
y_pred_original = scaler_y.inverse_transform(y_pred.reshape(-1, 1))

# 绘制结果
plt.scatter(X, y, color='red', label='真实数据')
plt.plot(X, y_pred_original, color='blue', label='SVR预测结果')
plt.title('SVR回归')
plt.xlabel('特征')
plt.ylabel('目标变量')
plt.legend()
plt.show()
